// ast的节点定义
export const ELEMENT_TYPE = 1; // 元素标签
export const TEXT_TYPE = 3; // 文本标签

// 用于解析模板的正则表达式
export const ncname = `[a-zA-Z_][\\-\\.0-9_a-zA-Z]*`; // abc-abc
export const qnameCapture = `((?:${ncname}\\:)?${ncname})`; // <a:b>
// 标签开头的正则,捕获的内容是标签名
export const startTagOpen = new RegExp(`^<${qnameCapture}`);
// 匹配标签结尾的</?>
export const endTag = new RegExp(`^<\\/${qnameCapture}[^>]*>`);
// 匹配属性
export const attribute =
	/^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)+|([^\s"'=<>`]+)))?/;
// 匹配标签结束的>
export const startTagClose = /^\s*(\/?)>/;
// 匹配{{}}中的内容
export const defaultTagRE = /\{\{((?:.|\r?\n)+?)\}\}/g;

